package elements 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.text.TextField;
	import styles.TextButtonStyle;
	import util.Bounds;
	import util.TextUtils;
	
	/**
	 * Кнопка с текстом
	 * @author Kasoi
	 */
	public class TextButton extends Button
	{
		
		////////////////////////////////////////////////////////////////////
		// Public properties
		////////////////////////////////////////////////////////////////////
		
		public function get text() : String 
		{
			return this._text;
		}
		
		////////////////////////////////////////////////////////////////////
		// Private properties
		////////////////////////////////////////////////////////////////////
		
		private var title: TextField;
		
		private var _text: String;
		
		private var _size: Bounds;
		
		private var _style: TextButtonStyle;
		
		private var _background: DisplayObject;
		
		private var _callOnClick: Function;
		
		private var reposition: Function;
		
		private var body: Sprite;
		
		////////////////////////////////////////////////////////////////////
		// Public methods
		////////////////////////////////////////////////////////////////////
		
		public function TextButton(text: String, size: Bounds = null, 
			style: TextButtonStyle = null, callOnClick: Function = null) 
		{
			this._text = text;
			if (style == null) style = new TextButtonStyle();
			this._style = style;
			this._callOnClick = callOnClick;
			this.title = TextUtils.makeOneLine(text, style.format);
			var tSize: Number = Number(style.format.size);
			if (size == null) size = new Bounds(this.title.width + tSize / 2, this.title.height + tSize / 8);
			this._size = size;
			
			this._background = this._style.drawBackground(size);
			this.body = new Sprite();
			this.reposition = this._style.positionMethod;
			
			this.title.mouseEnabled = false;
			
			this.body.addChild(this._background);
			this.body.addChild(this.title);
			
			this.addChild(this.body);
			
			super(this.body, this._style.buttonStyle, false, callOnClick);
			
			this.redraw();
		}
		
		public function redraw() : void 
		{
			this.body.removeChild(this._background);
			this._background = null;
			this._background = this._style.drawBackground(this._size);
			this.body.addChildAt(this._background, 0);
			
			this.reposition.apply(null, [this.title, this._background, this._size]);
		}
		
		////////////////////////////////////////////////////////////////////
		// Private methods
		////////////////////////////////////////////////////////////////////
		
		////////////////////////////////////////////////////////////////////
		// Listeners
		////////////////////////////////////////////////////////////////////
		
	}
	
}